/**
 * com.sunrise.dc.web.SetCharacterEncodingFilter.java
 */
package com.mbmed.doctor.commons.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

 /**
 * @file  SetCharacterEncodingFilter.java
 * @author yangzhengxin(Jason)
 * @version 0.1
 * @todo	自定义过虑器
 * Copyright(C), 2013-2014
 *			Shenzhen Coordinates Software Development Co., Ltd
 * History
 *   	1. Date: 2013-4-18
 *      	Author: yangzhengxin(Jason)
 *      	Modification: this file was created
 *   	2. ...
 */
public class SetCharacterEncodingFilter implements Filter {

    protected String encoding = null;
    
    protected FilterConfig filterConfig = null;

    protected boolean ignore = true;
    
    
	/* (non-Javadoc)
	 * @see javax.servlet.Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
		this.encoding = null;
		this.filterConfig = null;
	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
        if (ignore || (request.getCharacterEncoding() == null))
        {
            String encoding = selectEncoding(request);
            if (encoding != null)
            {  
                request.setCharacterEncoding(encoding);
                response.setCharacterEncoding(encoding);
                
            }
        }
        chain.doFilter(request, response);
	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
        {
            this.ignore = true;
        }
        else if (value.equalsIgnoreCase("true"))
        {
            this.ignore = true;
        }
        else if (value.equalsIgnoreCase("yes"))
        {
            this.ignore = true;
        }
        else
        {
            this.ignore = false;
        }
	}

    protected String selectEncoding(ServletRequest request){
        return (this.encoding);
    }
}
